package modele;

import java.awt.Color;

import dessin.VueDessin;

/**
 * La classe Cercle hérite de la classe FormeGéométrique :<br>
 * <ul>
 * <li>Origine</li>
 * <li>rayon</li>
 * <li>nbCercles</li>
 * </ul>
 * @author LEPAGE
 *
 */

public class Cercle extends FormeGeometrique {
	
	private Point Origine;
	
	private int rayon = 50; // Origine - Extremité
	 // Abcisse (x) et ordonnée (y) du centre
	
	private int nbCercles = 0;

		
    // Constructeur par default
	/**
	 * 
	 */
	public Cercle () {
		 //this.Origine = new Point();
         this.Origine = null;
		 this.rayon = 0;
		 nbCercles++;}
	
    // Constructeurs secondaires
	/**
	 * 
	 * @param o
	 */
	public Cercle(Point o){
		this.Origine = o.createClone();
		this.rayon = 0;
	}
	
	//Construit le cercle de centre (xo,yo) et de rayon R 
    public Cercle (Point o, double d ) {
		    this.Origine = o.createClone();
			this.rayon = (int)d;
			nbCercles++;} 
	
  /*public Cercle (int a, int b, int r) {
		super(a,b);
		this.Diametre = r;	} */
	
	//Construit le cercle avec une couleur
	public Cercle (Point o, double d, Color couleur) {
		this.Origine = o.createClone();
		this.rayon = (int)d;
		this.couleur = couleur;
		nbCercles++; } 
	/*	
	public Cercle (int a, int b, int r, Color couleur) {
		super(a,b);
		this.Diametre = r;	
		this.couleur = couleur; } */
	
	public Cercle(Point o, Point b) {
		this.Origine = o.createClone();
		this.rayon = (int)o.distance(b);
	}
		
	// toString
		/*public String toString() {
			return new String("Coordonnées du point de l'origine du cercle" 
		+ super.toString() + " \n\t " + "et de rayon" + this.Diametre);
		}*/
	
	 public String toString() {
		 return new String ("Le "+ nbCercles+ " eme cercle a pour origine " 
					+ this.Origine.toString() + "\n\t " + "et un rayon de : " + 
				 this.rayon); }	 
	/* 
	 public String toString() {
		 return new String ("coordonnées du point de l'origine du cercle" 
					+ super.toString(Origine) + "\n\t " + "et de rayon" + 
				 this.Rayon);}	*/
	 
   //Constructeur secondaire (Clone un cercle)
	 public Cercle createClone() {
		 Cercle Resultat = new Cercle(this.Origine,
				 this.rayon, this.getCouleur());
		 return Resultat; }
	 
   //Constructeur secondaire qui crée un cercle symetrique à l'origine
		public Cercle createSymetrieO() {
			Cercle Resultat = new Cercle(this.Origine,
					-this.getRayon());
			return Resultat;} 
		 	 
//Observateurs 
	 
    //Observateurs canoniques 
	  public Point getOrigine() {
	    return Origine;}
	 		
	  public int getRayon(){
	    return rayon;}

//Autres Observateurs
	  
	//Circonférence Cercle
	 public double Circonference() {
		return 2*Math.PI*this.rayon;}
	 
	//Aire du Cercle
	 public double Aire() {
		 return Math.PI*this.rayon*this.rayon;} 	
     
    //Mutateurs  
	 public void setOrigine(Point o) {
		 this.Origine = o;}
	 
     public void setRayon(int r) {
    	 this.rayon = r;}
     
     public void SymetrieRayon(){
    	 this.rayon = -this.rayon;}

	@Override
	public boolean equals(FormeGeometrique o) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public double perimetre() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public double surface() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void symetrieO(Point origine) {
		this.Origine.symetrieO(origine);
		
	}

	@Override
	public  void symetrieX(Point origine) {
		this.Origine.symetrieX(origine);
		
	}

	@Override
	public void symetrieY(Point origine) {
		this.Origine.symetrieY(origine);
		
	}


	@Override
	public Cercle createSymetrieO(Point origine) {
		return new Cercle(this.Origine.createSymetrieO(origine),this.rayon,this.couleur);
	}

	@Override
	public Cercle createSymetrieX(Point origine) {
		return new Cercle(this.Origine.createSymetrieX(origine),this.rayon,this.couleur);

	}

	@Override
	public Cercle createSymetrieY(Point origine) {
		return new Cercle(this.Origine.createSymetrieY(origine),this.rayon,this.couleur);
	}



	@Override
	public void deplacer(Point depart, Point destination) {
		this.Origine.deplacer(depart, destination);
		
	}

	@Override
	public boolean isOnTheClick(Point clic) {
		if (clic.distance(this.getOrigine()) < this.getRayon() + 10 && clic.distance(this.getOrigine()) > this.getRayon() - 10)return true;
		return false;
	}
     
     
     
     
     
     
     
}
